/*	Nama file		: Event.h
	Deskripsi		: Deklarasi type dan prototype primitf type Event
	Nama pembuat	: Muhammad Ghufron Mahfudhi/23512066
	Hari / Tanggal	: Rabu, 31 Oktober 2012
*/

#ifndef Event_H
#define Event_H

#include <stdlib.h>

#include "..\Datetime\DateTime.h"
#include "..\ListOfName\ListOfName.h"
#include "..\Point\Point.h"

class Event{
	private:
	int eNum;							//Nomor ID Event
	string eName;						//Nama Event
	Point eVenue;						//Tempat Event
		DateTime eTime;					//Tanggal dan Waktu Event
		ListOfName eLNames;				//Daftar nama yang terlibat
		
	public:
		/** Getter dan Setter **/
		int GetNum();
		/* Mengembalikan Nomor ID Event E*/
		string GetName();
		/* Mengembalikan Nama Event E */
		Point GetVenue();
		/* Mengembalikan Tempat Event E */
		DateTime GetTime();
		/* Mengembalikan DateTime Event E */
		ListOfName GetLNames();
		/* Mengembalikan daftar nama yang terlibat dalam Event E */

		void SetNum(const int&);
		/* Proses : Mengubah Nomor ID Event E */
		/* I.S : E sudah terbuat, newNo terdefinisi */
		/* F.S : Nomor Event E berisi newNo */
		void SetName(const string&);
		/* Proses : Mengubah Nama Event E */
		/* I.S : E sudah terbuat, newName terdefinisi */
		/* F.S : Nama Event E berisi newName */
		void SetVenue(const Point&);
		/* Proses : Mengubah Tempat Event E */
		/* I.S : E sudah terbuat, newPlace terdefinisi */
		/* F.S : Tempat Event E berisi newPlace */
		void SetTime(const DateTime&);
		/* Proses : Mengubah DateTime Event E */
		/* I.S : E sudah terbuat, newDateTime terdefinisi */
		/* F.S : DateTime Event E berisi newDateTime */
		void SetLNames(const ListOfName&);
		/* Proses : Mengubah daftar nama yang terlibat dalam Event E */
		/* I.S : E sudah terbuat, newNameList terdefinisi */
		/* F.S : NameList Event E berisi newNameList */

		/** 4 sekawan **/
		Event();
		/* Constructor: membuat Event dengan elemen default */
		Event(int, string, Point, DateTime, ListOfName);
		/* Constructor: membuat Event dari elemen-elemen yang terdefinisi */
		/* Prekondisi: semua parameter telah valid */
		Event(const Event&);
		/* Copy constructor: membuat Event dari Event yang sudah ada */
		Event& operator=(const Event&);
		/* Operator assignment Event */
		~Event();
		/* Destruktor Event */
		
		/** Method Baca/Tulis **/
		void BacaEvent (int);
		/* Proses : Membaca komponen Event dari masukan pengguna */
		/* I.S. Sembarang */
		/* F.S. Event terdefinisi dan merupakan Event yang valid */

		void TulisEvent();
		/* Proses : Menulis nilai setiap komponen Event ke layar */
		/* I.S. Event terdefinisi */
		/* F.S. Nilai Event ditulis ke layar beserta komponen-komponennya */

		/** Operator Lebih Kecil (<) **/
		friend int operator<(Event, Event);
		/* Mengembalikan 1 jika E1 lebih kecil dari pada E2 */
};

#endif
